﻿namespace LogicStudio.Framework.UI.Controles
{
    using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Media.Imaging;
    using Utilidades;

    public partial class CuadroDialogo
    {
        #region Constructores
        
        private CuadroDialogo()
        {
            Resources.Add("Recursos", RecursosLenguaje.Recursos);
            Style = RecursosFrameworkUI.ObtenerEstilo(RecursosFrameworkUI.NombreEstiloPopUp);
            InitializeComponent();
        }

        #endregion

        #region Métodos Privados

        private static void CerrarVentana(ChildWindow ventana)
        {
            ventana.Close();
        }

        #endregion

        #region Metodos Publicos

        public static void Mostrar(string mensaje, string titulo, TipoVentana tipoVentana)
        {
            Mostrar(mensaje, titulo, tipoVentana, null, null);
        }

        public static void Mostrar(string mensaje, string titulo, TipoVentana tipoVentana, Action metodoOkAceptar)
        {
            Mostrar(mensaje, titulo, tipoVentana, metodoOkAceptar, null);
        }

        public static void Mostrar(string mensaje, string titulo, TipoVentana tipoVentana, Action metodoOkAceptar, Action metodoNoCancelar)
        {
            var recurso = LogicStudio.Framework.UI.Utilidades.RecursosLenguaje.Recursos;
            var imagen = string.Empty;
            var boton = string.Empty;

            var ventana = new CuadroDialogo { Title = titulo, txtTexto = { Text = mensaje } };

            ventana.OKButton.Click += delegate { CerrarVentana(ventana); };
            ventana.CancelButton.Click += delegate { CerrarVentana(ventana); };

            if (metodoOkAceptar != null)
            {
                ventana.OKButton.Click += delegate { metodoOkAceptar(); };
            }

            if (metodoNoCancelar != null)
            {
                ventana.CancelButton.Click += delegate { metodoNoCancelar(); };
            }

            if (TipoVentana.Advertencia == tipoVentana || TipoVentana.Error == tipoVentana || TipoVentana.Ok == tipoVentana)
            {
                
                switch (tipoVentana)
                {
                    case TipoVentana.Advertencia:
                        imagen = recurso.GetType().GetProperty("ImagenAdvertencia").GetValue(imagen, null).ToString();
                        ventana.imgLogo.Source = new BitmapImage(new Uri(imagen, UriKind.Relative));
                        break;
                    case TipoVentana.Error:
                        imagen = recurso.GetType().GetProperty("ImagenError").GetValue(imagen, null).ToString();
                        ventana.imgLogo.Source = new BitmapImage(new Uri(imagen, UriKind.Relative));
                        break;
                    case TipoVentana.Ok:
                        imagen = recurso.GetType().GetProperty("ImagenOk").GetValue(imagen, null).ToString();
                        ventana.imgLogo.Source = new BitmapImage(new Uri(imagen, UriKind.Relative));
                        break;
                }
                boton = recurso.GetType().GetProperty("Aceptar").GetValue(boton, null).ToString();
                ventana.OKButton.Content = boton;
                ventana.CancelButton.Visibility = Visibility.Collapsed;

            }
            if (TipoVentana.Confirmar == tipoVentana)
            {
                imagen = recurso.GetType().GetProperty("ImagenPregunta").GetValue(imagen, null).ToString();
                ventana.imgLogo.Source = new BitmapImage(new Uri(imagen, UriKind.Relative));
                boton = recurso.GetType().GetProperty("Aceptar").GetValue(boton, null).ToString();
                ventana.OKButton.Content =boton ;
                boton = recurso.GetType().GetProperty("Cancelar").GetValue(boton, null).ToString();
                ventana.CancelButton.Content = boton;
            }
            if (TipoVentana.Pregunta == tipoVentana)
            {
                imagen = recurso.GetType().GetProperty("ImagenPregunta").GetValue(imagen, null).ToString();
                ventana.imgLogo.Source = new BitmapImage(new Uri(imagen, UriKind.Relative));
                boton = recurso.GetType().GetProperty("Si").GetValue(boton, null).ToString();
                ventana.OKButton.Content = boton;
                boton = recurso.GetType().GetProperty("No").GetValue(boton, null).ToString();
                ventana.CancelButton.Content = boton;
            }
            ventana.Show();
        }

        #endregion
    }
}